#include<cstdio>#include<iostream>#include<queue>#include<cstring>using namespace std;int quanzhi[15]={1,1,2,6,24,120,720,5040,40320,362880},dd[4]={1,-1,3,-3},T;bool f[4000000];struct juzhen{	int arr[10],bushu;	juzhen(){memset(arr,0,sizeof(arr));bushu=0;}};queue<juzhen>q;int zhuanhuan(int n[]){	int cnt=0,sum=0;	for(int i=0;i<9;i++)	{		cnt=0;		for(int j=i+1;j<9;j++)			if(n[j]<n[i])				cnt++;		sum+=cnt*quanzhi[9-i-1];	}	return sum;}bool hefa(int x,int y){	return y>=0&&y<9&&(x/3==y/3||x%3==y%3);}int main2(int x){	juzhen a,b;	for(int i=0;i<9;i++)	{		scanf("%d",&a.arr[i]); 		b.arr[i]=i+1;	}
	b.arr[8]=0;	int jieshu=zhuanhuan(b.arr);	q.push(a);	while(!q.empty())	{		juzhen t=q.front();		int ts=zhuanhuan(t.arr);		f[ts]=1;		if(ts==jieshu)		{			printf("Case %d: ",x);			if(t.bushu==1)			{printf("%d\n",t.bushu);				return 0;}			printf("%d\n",t.bushu+6);			return 0;		}		for(int i=0;i<9;i++)			if(t.arr[i]==0)			{				for(int j=0;j<4;j++)				{					juzhen tt=t;					swap(tt.arr[i],tt.arr[i+dd[j]]);					tt.bushu=t.bushu+1;					int tts=zhuanhuan(tt.arr);					if(tts==jieshu)					{						printf("Case %d: ",x);						if(tt.bushu==1)						{printf("%d\n",tt.bushu);return 0;}						printf("%d\n",tt.bushu+6);						return 0;					}					if(!f[tts])						q.push(tt);				}				break;			}		q.pop();	}	printf("impossible\n");	return 0;}int main(){	/*cin>>T;	for(int i=1;i<=T;i++)	{		memset(f,0,sizeof f);		while(!q.empty())q.pop();		main2(i);	}*/	main2(1);	return 0;}